#include <stdio.h>
#include <pthread.h>

#define NTHREADS 10 //define o número de threads como 10
void *thread_function(void *);
pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER;
int  counter = 0;

main()
{
   pthread_t thread_id[NTHREADS]; //criação de um vetor de threads
   int i, j;

   for(i=0; i < NTHREADS; i++)
   {
      pthread_create(&thread_id[i], NULL, thread_function, NULL);
   }

   for(j=0; j < NTHREADS; j++)
   {
      pthread_join(thread_id[j], NULL); 
   }
  
/* Agora que todas as threads estão completas eu posso imprimir o resultado final.
Sem a função join eu poderia imprimir o valor antes que todas as threads estivessem 
concluídas.*/

   printf("Final counter value: %d\n", counter);
}

void *thread_function(void *dummyPtr)
{
   printf("Thread number %ld\n", pthread_self());
// pthread_self() - retorna o id da thread corrente
   
   pthread_mutex_lock(&mutex1);
   counter++;
   pthread_mutex_unlock(&mutex1);
}
